package com.tyl.lock8;

import java.util.concurrent.TimeUnit;

/***
 * 5、增加一个静态方法，会执行发短信还是打电话？ 先发短信再打电话，是同一把锁
 * 6、两个对象，会先执行发短信还是打电话？     先打电话再发短信，不是同一把锁
 * */
public class Test03 {

    public static void main(String[] args) {
        // 两个对象的class模板只有一个，static，锁的是class
        Phone3 phone=new Phone3();
        Phone3 phone3=new Phone3();
        new Thread(()->{
            phone.sendSms();
            try {
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();
        new Thread(()->{
            phone3.call();
        }).start();
    }
}

//Phone是唯一的一个class对象
class  Phone3{
    // synchronized 锁的对象是方法的调用者
    //static静态方法
    //类一加载就有了，锁的是Class
    public static  synchronized  void sendSms(){
        //捕获
        try {
            TimeUnit.SECONDS.sleep(3);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("发短信");
    }
    public static synchronized void call(){
        System.out.println("打电话");
    }
}